#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2025/5/11 15:59
# @Author  : Chenmm
# @File    : mysql.py
# @Software: PyCharm
# @Des: mysql数据库


from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise
import os
from tortoise import Tortoise

# -----------------------数据库配置-----------------------------------
DB_ORM_CONFIG = {
    "connections": {
        "base": {
            'engine': 'tortoise.backends.mysql',
            "credentials": {
                'host': os.getenv('BASE_HOST', '127.0.0.1'),
                'user': os.getenv('BASE_USER', 'root'),
                'password': os.getenv('BASE_PASSWORD', 'root'),
                'port': int(os.getenv('BASE_PORT', 3306)),
                'database': os.getenv('BASE_DB', 'fasdapi'),
                "charset": "utf8mb4",#字符编码
                # "minsize":1,#连接池最小连接数
                # 'maxsize':10, #连接池大小
                # 'echo': True #打印sql语句
            }
        },
        # "db2": {
        #     'engine': 'tortoise.backends.mysql',
        #     "credentials": {
        #         'host': os.getenv('DB2_HOST', '127.0.0.1'),
        #         'user': os.getenv('DB2_USER', 'root'),
        #         'password': os.getenv('DB2_PASSWORD', '123456'),
        #         'port': int(os.getenv('DB2_PORT', 3306)),
        #         'database': os.getenv('DB2_DB', 'db2'),
        #     }
        # },
        # "db3": {
        #     'engine': 'tortoise.backends.mysql',
        #     "credentials": {
        #         'host': os.getenv('DB3_HOST', '127.0.0.1'),
        #         'user': os.getenv('DB3_USER', 'root'),
        #         'password': os.getenv('DB3_PASSWORD', '123456'),
        #         'port': int(os.getenv('DB3_PORT', 3306)),
        #         'database': os.getenv('DB3_DB', 'db3'),
        #     }
        # },

    },
    "apps": {
        "base": {"models": ["models.base", "aerich.models"], "default_connection": "base"},
        # "db2": {"models": ["models.db2"], "default_connection": "db2"},
        # "db3": {"models": ["models.db3"], "default_connection": "db3"}
    },
    'use_tz': False,
    'timezone': 'Asia/Shanghai'
}

# 新版本中此方法不再生效
# async def register_mysql(app: FastAPI):
#     print("注册数据库")
#     # 注册数据库
#     register_tortoise(
#         app,
#         config=DB_ORM_CONFIG,
#         generate_schemas=True, # 是否自动生成数据库表结
#         add_exception_handlers=True, # 是否添加异常处理器
#     )
#     print("注册数据库完毕")


async def register_mysql(app: FastAPI):
    print("注册数据库")
    # 启动时初始化数据库
    Tortoise._init_timezone(use_tz=False, timezone='Asia/Shanghai')

    await Tortoise.init(
        config=DB_ORM_CONFIG,
        # _create_db = True,  # 自动创建数据库 （数据库存在时,不要启用这项）
    )



    await Tortoise.generate_schemas()  # 自动生成表结构


    # yield
    # # 关闭
    # await Tortoise.close_connections()  # 关闭数据库连接

    print("注册数据库完毕")



async def close_mysql(app: FastAPI):
    # 关闭数据库连接
    await Tortoise.close_connections()  # 关闭数据库连接
    print('关闭数据库连接')